home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / distutils / text_file.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  6KB  |  216 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __revision__ = '$Id: text_file.py 29687 2002-11-14 02:25:42Z akuchling $'
  5. from types import *
  6. import sys
  7. import os
  8. import string
  9.  
  10. class TextFile:
  11.     default_options = {
  12.         'strip_comments': 1,
  13.         'skip_blanks': 1,
  14.         'lstrip_ws': 0,
  15.         'rstrip_ws': 1,
  16.         'join_lines': 0,
  17.         'collapse_join': 0 }
  18.     
  19.     def __init__(self, filename = None, file = None, **options):
  20.         if filename is None and file is None:
  21.             raise RuntimeError, "you must supply either or both of 'filename' and 'file'"
  22.         
  23.         for opt in self.default_options.keys():
  24.             if options.has_key(opt):
  25.                 setattr(self, opt, options[opt])
  26.                 continue
  27.             setattr(self, opt, self.default_options[opt])
  28.         
  29.         for opt in options.keys():
  30.             if not self.default_options.has_key(opt):
  31.                 raise KeyError, "invalid TextFile option '%s'" % opt
  32.                 continue
  33.         
  34.         if file is None:
  35.             self.open(filename)
  36.         else:
  37.             self.filename = filename
  38.             self.file = file
  39.             self.current_line = 0
  40.         self.linebuf = []
  41.  
  42.     
  43.     def open(self, filename):
  44.         self.filename = filename
  45.         self.file = open(self.filename, 'r')
  46.         self.current_line = 0
  47.  
  48.     
  49.     def close(self):
  50.         self.file.close()
  51.         self.file = None
  52.         self.filename = None
  53.         self.current_line = None
  54.  
  55.     
  56.     def gen_error(self, msg, line = None):
  57.         outmsg = []
  58.         if line is None:
  59.             line = self.current_line
  60.         
  61.         outmsg.append(self.filename + ', ')
  62.         if type(line) in (ListType, TupleType):
  63.             outmsg.append('lines %d-%d: ' % tuple(line))
  64.         else:
  65.             outmsg.append('line %d: ' % line)
  66.         outmsg.append(str(msg))
  67.         return string.join(outmsg, '')
  68.  
  69.     
  70.     def error(self, msg, line = None):
  71.         raise ValueError, 'error: ' + self.gen_error(msg, line)
  72.  
  73.     
  74.     def warn(self, msg, line = None):
  75.         sys.stderr.write('warning: ' + self.gen_error(msg, line) + '\n')
  76.  
  77.     
  78.     def readline(self):
  79.         if self.linebuf:
  80.             line = self.linebuf[-1]
  81.             del self.linebuf[-1]
  82.             return line
  83.         
  84.         buildup_line = ''
  85.         while None:
  86.             line = self.file.readline()
  87.             if line == '':
  88.                 line = None
  89.             
  90.             if self.strip_comments and line:
  91.                 pos = string.find(line, '#')
  92.                 if pos == -1:
  93.                     pass
  94.                 elif pos == 0 or line[pos - 1] != '\\':
  95.                     if not line[-1] == '\n' or '\n':
  96.                         pass
  97.                     eol = ''
  98.                     line = line[0:pos] + eol
  99.                     if string.strip(line) == '':
  100.                         continue
  101.                     
  102.                 else:
  103.                     line = string.replace(line, '\\#', '#')
  104.             
  105.             if self.join_lines and buildup_line:
  106.                 if line is None:
  107.                     self.warn('continuation line immediately precedes end-of-file')
  108.                     return buildup_line
  109.                 
  110.                 if self.collapse_join:
  111.                     line = string.lstrip(line)
  112.                 
  113.                 line = buildup_line + line
  114.                 if type(self.current_line) is ListType:
  115.                     self.current_line[1] = self.current_line[1] + 1
  116.                 else:
  117.                     self.current_line = [
  118.                         self.current_line,
  119.                         self.current_line + 1]
  120.             elif line is None:
  121.                 return None
  122.             
  123.             if type(self.current_line) is ListType:
  124.                 self.current_line = self.current_line[1] + 1
  125.             else:
  126.                 self.current_line = self.current_line + 1
  127.             if self.lstrip_ws and self.rstrip_ws:
  128.                 line = string.strip(line)
  129.             elif self.lstrip_ws:
  130.                 line = string.lstrip(line)
  131.             elif self.rstrip_ws:
  132.                 line = string.rstrip(line)
  133.             
  134.             if (line == '' or line == '\n') and self.skip_blanks:
  135.                 continue
  136.             
  137.             if self.join_lines:
  138.                 if line[-1] == '\\':
  139.                     buildup_line = line[:-1]
  140.                     continue
  141.                 
  142.                 if line[-2:] == '\\\n':
  143.                     buildup_line = line[0:-2] + '\n'
  144.                     continue
  145.                 
  146.             
  147.             return line
  148.             continue
  149.             return None
  150.  
  151.     
  152.     def readlines(self):
  153.         lines = []
  154.         while None:
  155.             line = self.readline()
  156.             if line is None:
  157.                 return lines
  158.             
  159.             continue
  160.             return None
  161.  
  162.     
  163.     def unreadline(self, line):
  164.         self.linebuf.append(line)
  165.  
  166.  
  167. if __name__ == '__main__':
  168.     test_data = '# test file\n\nline 3 \\\n# intervening comment\n  continues on next line\n'
  169.     result1 = map((lambda x: x + '\n'), string.split(test_data, '\n')[0:-1])
  170.     result2 = [
  171.         '\n',
  172.         'line 3 \\\n',
  173.         '  continues on next line\n']
  174.     result3 = [
  175.         '# test file\n',
  176.         'line 3 \\\n',
  177.         '# intervening comment\n',
  178.         '  continues on next line\n']
  179.     result4 = [
  180.         'line 3 \\',
  181.         '  continues on next line']
  182.     result5 = [
  183.         'line 3   continues on next line']
  184.     result6 = [
  185.         'line 3 continues on next line']
  186.     
  187.     def test_input(count, description, file, expected_result):
  188.         result = file.readlines()
  189.         if result == expected_result:
  190.             print 'ok %d (%s)' % (count, description)
  191.         else:
  192.             print 'not ok %d (%s):' % (count, description)
  193.             print '** expected:'
  194.             print expected_result
  195.             print '** received:'
  196.             print result
  197.  
  198.     filename = 'test.txt'
  199.     out_file = open(filename, 'w')
  200.     out_file.write(test_data)
  201.     out_file.close()
  202.     in_file = TextFile(filename, strip_comments = 0, skip_blanks = 0, lstrip_ws = 0, rstrip_ws = 0)
  203.     test_input(1, 'no processing', in_file, result1)
  204.     in_file = TextFile(filename, strip_comments = 1, skip_blanks = 0, lstrip_ws = 0, rstrip_ws = 0)
  205.     test_input(2, 'strip comments', in_file, result2)
  206.     in_file = TextFile(filename, strip_comments = 0, skip_blanks = 1, lstrip_ws = 0, rstrip_ws = 0)
  207.     test_input(3, 'strip blanks', in_file, result3)
  208.     in_file = TextFile(filename)
  209.     test_input(4, 'default processing', in_file, result4)
  210.     in_file = TextFile(filename, strip_comments = 1, skip_blanks = 1, join_lines = 1, rstrip_ws = 1)
  211.     test_input(5, 'join lines without collapsing', in_file, result5)
  212.     in_file = TextFile(filename, strip_comments = 1, skip_blanks = 1, join_lines = 1, rstrip_ws = 1, collapse_join = 1)
  213.     test_input(6, 'join lines with collapsing', in_file, result6)
  214.     os.remove(filename)
  215.  
  216.